/*
 * PagFormularioTipoAtividade.java
 * 
 * Projeto: Kruskal - SRAC
 * LEDS - Laboratório de Engenharia e Desenvolvimento de Software
 * IFES - Instituto Federal do Espírito Santo - Campus Serra.
 */
package srac.controleatividades.cih;

import java.util.ArrayList;
import java.util.List;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.*;
import srac.controleatividades.cci.CtrlInterno;
import srac.controleatividades.cdp.Funcionario;
import srac.controleatividades.cdp.TipoUsuario;
import srac.controleatividades.cdp.Usuario;

public class PagFormularioFuncionario extends GenericForwardComposer {

    private CtrlInterno ctrl = CtrlInterno.getInstance();
    private Window winFormularioFuncionario;
    private Textbox siape;
    private Textbox nome;
    private Textbox senha;
    private Combobox tipos;
    private Funcionario obj;
    private Button salvarFuncionario;
    private String siapeAntigo;
    private String senhaAntiga;
    private int MODO;

    @Override
    public void doAfterCompose(Component comp) throws Exception {
        super.doAfterCompose(comp);
        List<TipoUsuario> t = new ArrayList<TipoUsuario>();
        t.add(TipoUsuario.ADMINISTRADOR);
        t.add(TipoUsuario.PEDAGOGO);
        t.add(TipoUsuario.SECRETARIA);
        tipos.setModel(new ListModelList(t, true));
        tipos.setReadonly(true);
    }

    public void onCreate$winFormularioFuncionario() {

        //if feito para verificar se existe algum usuario logado, se nao existir eh redirecionado para o login
        if (Executions.getCurrent().getSession().getAttribute("usuario") == null) {
            Executions.sendRedirect("/");
            winFormularioFuncionario.detach();
        }
        else {
        MODO = (Integer) arg.get("tipo");
            if (MODO != ctrl.SALVAR) {
                obj = (Funcionario) arg.get("obj");
                siapeAntigo = obj.getSiape();
                senhaAntiga = obj.getUsuario().getSenha();
                preencherTela();
                if (MODO == ctrl.CONSULTAR) {
                    this.salvarFuncionario.setVisible(false);
                    bloquearTela();
                }
            }
        }
    }

    private void preencherTela() {
        if (obj.getUsuario().getTipo() != null) {
            ((ListModelList) tipos.getModel()).addToSelection(obj.getUsuario().getTipo());
        }
        nome.setText(obj.getNome());
        siape.setText(obj.getSiape());
        senha.setText(obj.getUsuario().getSenha());
    }

    private void bloquearTela() {
        tipos.setDisabled(true);
        nome.setDisabled(true);
        siape.setDisabled(true);
        senha.setDisabled(true);
    }

    public void onClick$salvarFuncionario(Event event) {
        Funcionario f = null;
        String msg = valido();
        if (msg.trim().equals("")) {
            if (MODO == ctrl.EDITAR) {
                if(!siapeAntigo.equals(siape.getText()))
                {
                    if(!ctrl.verificaExistenciaUsuario(siape.getText()))
                    {
                        obj.setNome(nome.getText());
                        obj.setSiape(siape.getText());
                        if(!senhaAntiga.equals(senha.getText()))
                        {
                            obj.getUsuario().setSenhaCriptografar(senha.getText());
                        }
                        obj.getUsuario().setTipo((TipoUsuario) tipos.getSelectedItem().getValue());
                        obj.getUsuario().setLogin(siape.getText());
                        f = ctrl.alterarFuncionario(obj); //Atera o funcionario
                    }
                    else
                    {
                        Messagebox.show("Siape já cadastrado!", "Informe:", 0, Messagebox.EXCLAMATION);
                    }
                }
                else
                {
                    obj.setNome(nome.getText());
                    if(!senhaAntiga.equals(senha.getText()))
                    {
                        obj.getUsuario().setSenhaCriptografar(senha.getText());
                    }
                    obj.getUsuario().setTipo((TipoUsuario) tipos.getSelectedItem().getValue());
                    f = ctrl.alterarFuncionario(obj); //Atera o funcionario
                }
                if (f != null) {
                    winFormularioFuncionario.onClose();
                }
            } 
            else { //Incluir
                ArrayList<Object> list = new ArrayList<Object>();
                list.add(nome.getText());
                list.add(siape.getText());
                list.add(senha.getText());
                list.add(tipos.getSelectedItem().getValue());
                
                if(!ctrl.verificaExistenciaUsuario(siape.getText()))
                {
                    f = ctrl.incluirFuncionario(list); //Inclui o funcionario
                }
                else
                {
                    Messagebox.show("Siape já cadastrado!", "Informe:", 0, Messagebox.EXCLAMATION);
                }
                if (f != null) {
                    winFormularioFuncionario.onClose();
                }
            }

        } else {
            
            Messagebox.show(msg, "Informe:", 0, Messagebox.EXCLAMATION);
        }
    }

    public void onClick$voltar(Event event) {
        winFormularioFuncionario.onClose();
    }

    public void limparCampos() {
        tipos.setSelectedItem(null);
        nome.setText("");
        senha.setText("");
        siape.setText("");
    }

    private String valido() { //Verifica se esta faltando algum campo
        String msg = "";
        if (tipos.getSelectedItem() == null) {
            msg += "- Tipo\n";
        }
        if (nome.getText().trim().equals("")) {
            msg += "- Nome\n";
        }
        if (senha.getValue() == null) {
            msg += "- Senha\n";
        }
        if (siape.getValue() == null) {
            msg += "- Siape\n";
        }

        return msg;
    }
}
